#Bash 的 if 条件语句
Bash 的 if 条件语句的语法为:
if 条件命令
then
命令
...
elif 条件命令
then
命令
...
else
命令
...
fi
其中,条件命令返回成功(0)时为真(true),返回失败(非 0)时为假(false)。
如果省略(部分)换行,则需要使用分号(;
)区分:
if 条件命令; then 命令; 命令; elif 条件命令; then 命令; 命令; else 命令; 命令; fi
示例:
if test "$SHELL" = "/bin/bash"
then
echo 很好
else
echo 完蛋
fi
- 判断变量
SEHLL
的值是否是/bin/bash
注意,这里的 "$SHELL" = "/bin/bash"
不要省略引号写成 $SHELL = /bin/bash
;否则变量 SHELL
为空时会产生语法错误。
=
- 判断字符串相等!=
- 判断字符串不同
#test 命令
如上述示例代码,Bash 的条件一般使用 test
命令,格式为:
test 条件表达式
[ 条件表达式 ] # 不可省略空格
[[ 条件表达式 ]] # 不可省略空格
test
和[
是等价的,它们既是 Bash 的内置命令,也是可执行文件[[
是 Bash 的关键字,额外支持正则判断
test
命令的常用选项如下:
-e
- 文件存在-f
- 文件存在且是普通文件-d
- 文件存在且是目录-b
- 文件存在且是块设备-c
- 文件存在且是字符设备-L
- 文件存在且是符号链接-eq
- 等于(只能用于整数,下同)-ne
- 不等于-lt
- 小于-le
- 小于或等于-gt
- 大于-ge
- 大于或等于
例如:
FILE="$0"
if [ -f $FILE ]; then
echo $FILE 是普通文件
elif [ -e $FILE ]; then
echo $FILE 不是普通文件
else
echo $FILE 文件不存在
fi
#true 和 false
Bash 的内置命令中包含 true
和 false
两个命令,前者直接返回成功(0),后者直接返回失败(1)。